package org.jeecg.modules.finance.service;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.finance.vo.PayTypeStatVo;
import org.jeecg.modules.finance.vo.RoomStatVo;
import org.jeecg.modules.fw.entity.FwRoomRepair;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.pos.entity.PosOrderGoodsPayment;

import java.util.HashMap;
import java.util.List;

/**
 * @Description: 收款汇总统计
 * @Author: jeecg-boot
 * @Date:   2023-04-19
 * @Version: V1.0
 */
public interface ISummaryService extends IService<PosOrderGoodsPayment> {
    /**
     * 收款汇总统计
     *
     * @param page
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public Page<HashMap<String, Object>> pageList(Page<HashMap<String, Object>> page, String hotelId, DateTime startTime, DateTime endTime, Integer departmentId);

    /**
     * 收退款明细列表
     * @param page
     * @param hotelId
     * @param startTime
     * @param endTime
     * @param departmentId
     * @return
     */
    public Page<HashMap<String, Object>> financePageList(Page<HashMap<String, Object>> page, String hotelId, DateTime startTime, DateTime endTime, Integer departmentId);

    /**
     *
     * @param hotelId 酒店id
     * @param startTime 开始日期
     * @param endTime 截至日期
     * @param section 1天 2月 3季度 4年
     * @return
     */
    public List<HashMap<String, Object>> dayShouRuStatList(String hotelId, DateTime startTime, DateTime endTime, Integer section);

    /**
     * 按收款方式收入统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> payMethodStatList(String hotelId, DateTime startTime, DateTime endTime);

    /**
     * 按房型收入统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> layoutStatList(String hotelId, DateTime startTime, DateTime endTime);
    /**
     * 按费项收入统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> subjectTypeStatList(String hotelId,  DateTime startTime, DateTime endTime);

    /**
     * 按来源各项统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> livingSourceStatList( String hotelId, DateTime startTime,DateTime endTime);

    /**
     * 按客型各项统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> customerTypeStatList(String hotelId,  DateTime startTime,  DateTime endTime);

    /**
     * 按入住类型各项统计列表
     * @param hotelId
     * @param startTime
     * @param endTime
     * @return
     */
    public List<HashMap<String, Object>> livingTypeStatList(String hotelId,  DateTime startTime,  DateTime endTime);

    /**
     * 按房间统计当日收入明细列表
     * @param hotelId
     * @return
     */
    public List<RoomStatVo> roomStatList(String hotelId, DateTime startTime,DateTime endTime);

    /**
     * 按时间统计当日收入明细列表
     * @param hotelId
     * @return
     */
    public List<HashMap<String, Object>> dayOrderFeeList(String hotelId, DateTime startTime,DateTime endTime);

    /**
     * 按收款方式统计当日收入明细列表
     * @param hotelId
     * @return
     */
    public List<PayTypeStatVo> dayPayTypeList(String hotelId);

    /**
     * 按事项统计当日支出明细列表
     * @param hotelId
     * @return
     */
    public List<HashMap<String, Object>> dayMatterExpendDetailList(String hotelId);

    /**
     * 按时间统计当日支出明细列表
     * @param hotelId
     * @return
     */
    public List<HashMap<String, Object>> dayExpendOrderFeeList(String hotelId);

    /**
     * 按退款方式统计当日支出明细列表
     * @param hotelId
     * @return
     */
    public List<PayTypeStatVo> dayPayTypeExpendList(String hotelId);

    /**
     * 收支情况统计
     * @param hotelId
     * @param section 1近7天 2本月 3近半年 4本年度
     * @return
     */
    public List<HashMap<String, Object>> financeSummary(String hotelId,Integer section);
}
